/**
 * 数据表信息接口
 */
export interface TableInfo {
  name: string;        // 表名
  primaryKey?: string; // 主键字段名，默认为id
  columns: ColumnInfo[];
}

/**
 * 列定义接口
 */
export interface ColumnInfo {
  name: string;        // 列名
  type: string;        // 数据类型，如 INTEGER, TEXT, REAL, BLOB
  primaryKey?: boolean;// 是否为主键
  notNull?: boolean;   // 是否允许为空
  unique?: boolean;    // 是否唯一
  default?: any;       // 默认值
  autoIncrement?: boolean; // 是否自增
}

/**
 * 基础实体类，所有实体模型继承此类
 */
export abstract class BaseEntity {
  // 获取表信息的抽象方法，需要子类实现
  static getTableInfo(): TableInfo {
    throw new Error('子类必须实现getTableInfo方法');
  }

  // 创建表SQL
  static getCreateTableSQL(): string {
    const tableInfo = this.getTableInfo();
    const columns = tableInfo.columns.map(col => {
      let definition = `${col.name} ${col.type}`;

      if (col.primaryKey) {
        definition += ' PRIMARY KEY';

        if (col.autoIncrement) {
          definition += ' AUTOINCREMENT';
        }
      }

      if (col.notNull) {
        definition += ' NOT NULL';
      }

      if (col.unique) {
        definition += ' UNIQUE';
      }

      if (col.default !== undefined) {
        if (typeof col.default === 'string') {
          definition += ` DEFAULT '${col.default}'`;
        } else {
          definition += ` DEFAULT ${col.default}`;
        }
      }

      return definition;
    }).join(', ');

    return `CREATE TABLE IF NOT EXISTS ${tableInfo.name} (${columns})`;
  }
}
